﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using UricaoWeb.LogicaDeNegocios.Tours;

using UricaoWeb.LogicaDeNegocios.Seguridad_y_Roles;

namespace UricaoWeb.Presentacion
{
    /// <summary>
    /// Recibe los datos necesarios para insertar un Tour, validandolos previamente
    /// </summary>
    public partial class AgregarTour : API_Seguridad_Principal
    {
        List<String> _listaDias = new List<String>();
        private TourLogica _controlador = new TourLogica();
        private string _paginaRedireccion = "API_tour_BuscarTour.aspx"; 
        private string _alerta = "";
        private int _idHotelRecibido;


        /// <summary>
        /// Cargar una nueva página con la variable de Sesión (Id del Hotel con el que se está trabajando o quiere trabajar)
        /// </summary>
        /// <param name="sender">Objeto que genera el evento, en este caso la carga de la página</param>
        /// <param name="e">Contiene la sesión activa con la que se está trabajando</param>
        protected void Page_Load(object sender, EventArgs e)
        {
            var master = Master as MasterPage;
            if (master != null)
            {
                master.actualizar_label();
            }
            base.validar_usuario();

            bool inicio = Inicio();

            if (inicio)
            {
                //do something   
            }
            else
            {
                Redireccion();
            }
           
        }


        /// <summary>
        /// Método de carga inicial para la validacion del usuario
        /// </summary>
        /// <returns>Booleano de inicializacion</returns>
        private bool Inicio()
        {
            Logica_Usuario usuario = (Logica_Usuario)Session["user"];
            bool parsed = false;

            if (usuario != null)
            {
                parsed = Int32.TryParse(usuario.FkHotel, out _idHotelRecibido);
                if (!parsed)
                {
                    Console.WriteLine("Int32.TryParse no pudo realizar la conversion '{0}' a entero (int).\n", usuario.FkHotel);
                    _alerta = "Disculpe, no estamos disponibles en estos momentos";
                    MostrarAlerta();
                }
            }
            else
            {
                _paginaRedireccion = "API_Seguridad_Login_.aspx";
                Server.Transfer(_paginaRedireccion, false);
            }

            return parsed;
        }



        /// <summary>
        /// Cambia el mensaje del label de alerta
        /// </summary>
        private void MostrarAlerta()
        {
            alerta.Text = _alerta;
            alerta.Visible = true;
        }


        /// <summary>
        /// Método de llamada a la agregación del tour
        /// </summary>
        /// <param name="nombre">Nombre del tour</param>
        /// <param name="descripcion">Descripcion del tour</param>
        /// <param name="listaDia">Dias de celebración del tour</param>
        /// <param name="horainicio">Hora de inicio del tour</param>
        /// <param name="horafin">Hora final del tour</param>
        /// <param name="capacidad">Capacidad del tour</param>
        /// <param name="precio">Preco actual del tour</param>
        /// <param name="idHotel">Referencia del hotel que ofrece el tour</param>
        private int AgregarUnTour(string nombre , string descripcion, List <String> listaDia , 
                                    string horainicio, string horafin, string capacidad , string precio )
        {

            try
            {
                int idAgregado = _controlador.TourAgregar(nombre, descripcion, listaDia,
                                                            horainicio, horafin, capacidad,
                                                            precio, _idHotelRecibido);
                return idAgregado;
            }
            catch (Exception e)
            {
                _alerta = "No se ha podido encontrar itinerario para dicho tour ";
                MostrarAlerta();
            }
            return 0;
        }

        /// <summary>
        /// Se construye una lista con los días seleccionados por el usuario
        /// </summary>
        private void AgregarDias()
        {
            //Esto está muy caiman! Se debe de arreglar

            if (lunes.Checked)
            {
                string Lunes = "lunes";
                _listaDias.Add(Lunes);
            }

            if (martes.Checked)
            {
                string Martes = "martes";
                _listaDias.Add(Martes);
            }

            if (miercoles.Checked)
            {
                string Miercoles = "miercoles";
                _listaDias.Add(Miercoles);
            }

            if (jueves.Checked)
            {
                string Jueves = "jueves";
                _listaDias.Add(Jueves);
            }
            if (viernes.Checked)
            {
                string Viernes = "viernes";
                _listaDias.Add(Viernes);
            }
            if (sabado.Checked)
            {
                string Sabado = "sabado";
                _listaDias.Add(Sabado);
            }
            if (domingo.Checked)
            {
                string Domingo = "domingo";
                _listaDias.Add(Domingo);
            }
        
        }


        /// <summary>
        /// Verifica que al menos un checkbox esté seleccionado
        /// </summary>
        private void ValidarDias()
        {

            if (!(lunes.Checked) || !(martes.Checked) || !(miercoles.Checked) || !(jueves.Checked) || !(viernes.Checked) ||
                 !(sabado.Checked) || !(domingo.Checked))
            {
                alerta.Text = "Debe seleccionar al menos un día";
                alerta.Visible = true;
                return;
            }

        }

        /// <summary>
        /// Validación de que un tour ha sido aregado con éxito, o ha presentado fallas en el registro
        /// </summary>
        /// <param name="sender">Objeto de tipo boton</param>
        /// <param name="e">evento que realiza el usuario (hacer clic)</param>
        protected void Continuar(object sender, EventArgs e)
        {
            string nombretour = nombre.Text;
            string descripciontour = descripcion.Text;
            string horainicial = horainicio.Text;
            string horafinal = horafin.Text;
            string capacidadtour = capacidad.Text;
            string preciotour = precio.Text;
            
            //Lectura de los días del tour
            AgregarDias();
            int idAgregado = AgregarUnTour(nombretour, descripciontour, 
                                        _listaDias, horainicial, horafinal, 
                                        capacidadtour, preciotour);
           
            if (idAgregado != 0)
            {
                _alerta = "Se ha agregado exitosamente";
                MostrarAlerta();
                Session["idTour"] = idAgregado;
                _paginaRedireccion = "API_tour_ConsultarTour.aspx";
                
            }
            else
            {
                _alerta = "Disculpe, su petición no pudo ser procesada. Intente más tarde";
                MostrarAlerta();
                Redireccion();
            }
            Redireccion();
        }


        /// <summary>
        /// Redireccionar a otra página
        /// </summary>
        private void Redireccion()
        {
            Response.Redirect(_paginaRedireccion);
        }

        /// <summary>
        /// Boton que permite regresar a la pantalla anterior consultarTour
        /// </summary>
        protected void Regresar(object sender, EventArgs e)
        {
            Redireccion();
        }


        protected void TextBox1_TextChanged(object sender, EventArgs e)
        {

        }

        
    }
}